package com.ndp.fb.rdb.api;


import com.ndp.fb.rdb.model.CountDetailByBatchIdAndTypesBean;
import com.ndp.fb.rdb.model.Pager;
import com.ndp.fb.rdb.model.PublishBatch;
import com.ndp.fb.rdb.model.PublishBatchCSAName;

import java.util.List;

/**
 * Created by Jacky on 2014/10/23.
 */
public interface PublishBatchRdbService {
    PublishBatch findById(Long id);

    PublishBatch findById(Long id, String userId);

    /**
     * 根据userId 查询批次列表结果集  创建时间的倒序 ORDER BY create_time desc";
     *
     * @param userId
     * @param firstResult
     * @param sizeNo
     * @return
     */
    Pager<PublishBatch> findPagerByUserIdOrderByCreateTime(String userId, Integer firstResult, Integer sizeNo);



    /**
     * 根据Id列表查询用户的发布批次
     *
     * @param ids
     * @param userId
     * @return
     * @discription
     * @author yanghao
     * 创建时间 2014年12月25日 下午1:13:40
     */
    List<PublishBatch> findByIdsAndUserId(Long[] ids, String userId);


    Long save(PublishBatch obj);



    List<PublishBatch> searchPublishBatchByNameAndUserId(String batchName, String userId);

    /**
     * 查找 待发布 状态下的所有批次id
     */
    List<Long> findIdsByPublishStatus(int publishStatus);

    Integer findResultCountByBatchIdAndTypes(Long batchId, Integer... type);

    List<PublishBatch> findByPublishStatus(int publishStatus);

    List<PublishBatch> findByGoingPublishStatus(int publishStatus1, int publishStatus2);

    /**
     * 按批次id 更新 发布状态
     */
    void updatePublishStatusById(Long batchId, int publishStatus);

    /**
     * 更新批次到失败状态，并更新失败的位置，前置，还是发布时
     * @param failType
     */
    void updatePublishFail(Long batchId,String failType);

    /**
     * 更新 发布状态 重试次数+1
     */
    void updateStatsAndRetryCntAndTimeById(Long batchId, int publishStatus);

    /**
     * @param batchId
     * @param publishStatus
     * @param accountCount
     * @param campaignCount
     * @param adsetCount
     * @param adgroupCount
     * @param creativeCount
     * @discription 按批次id 更新 该批次的创建总账号数，总campaign数等信息
     * @author yanghao
     * 创建时间 2014年12月24日 下午10:26:25
     */
    void updatePublishBathById(Long batchId, Integer publishStatus, Long userAudianceId, Integer accountCount, Integer campaignCount,
                               Integer adsetCount, Integer adgroupCount, Integer creativeCount);

    /**
     * 按批次id 更新 发布状态
     */
    void deleteByBatchId(Long batchId);

    /**
     * 批次下 campagin成功/失败总数 adcreative adset adgroup
     */
    List<CountDetailByBatchIdAndTypesBean> countDetailByBatchIdAndTypes(Long batchId, String types);

    /**
     * 在1:1:1的比例下获取 campaign adset，adname的名称
     * @param batchId
     * @return
     */
    PublishBatchCSAName findCSANameByBatchId(Long batchId);

}
